package com.beiben.work.process.mapper;


import com.beiben.work.process.domain.FileProcessUser;
import com.beiben.work.process.domain.FileProcessUserGroup;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 任务分配Mapper接口
 *
 * @author xgq
 * @date 2020-08-26
 */
public interface FileProcessUserMapper {
    /**
     * 查询任务分配
     *
     * @param itemId 任务分配ID
     * @return 任务分配
     */
    public FileProcessUser selectFileProcessUserById(Long itemId);

    /**
     * 查询任务分配列表
     *
     * @param fileProcessUser 任务分配
     * @return 任务分配集合
     */
    public List<FileProcessUser> selectFileProcessUserList(FileProcessUser fileProcessUser);


    /**
     * 查询任务分配列表
     *
     * @param
     * @return 任务分配集合
     */
    public List<FileProcessUser> selectNoFinshFileProcessUserList();

    /**
     * 查询我的待办工作 -日常工作
     *
     * @param fileProcessUser 任务分配
     * @return 任务分配集合
     */
    public List<FileProcessUser> selectMyWaitWorkList(FileProcessUser fileProcessUser);

    /**
     * 查询我的待办工作 -项目工作
     *
     * @param fileProcessUser
     * @return
     */
    List<FileProcessUser> selectMyWaitWorkProjectList(FileProcessUser fileProcessUser);

    /**
     * 查询任务分配列表
     *
     * @param workId 任务分配
     * @return 任务分配集合
     */
    public List<FileProcessUser> selectFileProcessUserListByWorkId(Long workId);

    /**
     * 新增任务分配
     *
     * @param fileProcessUser 任务分配
     * @return 结果
     */
    public int insertFileProcessUser(FileProcessUser fileProcessUser);

    /**
     * 修改任务分配
     *
     * @param fileProcessUser 任务分配
     * @return 结果
     */
    public int updateFileProcessUser(FileProcessUser fileProcessUser);

    /**
     * 删除任务分配
     *
     * @param itemId 任务分配ID
     * @return 结果
     */
    public int deleteFileProcessUserById(Long itemId);

    /**
     * 批量删除任务分配
     *
     * @param itemIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteFileProcessUserByIds(Long[] itemIds);


    /**
     * 批量删除任务分配
     *
     * @param workIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteFileProcessByWorkIds(Long[] workIds);

    /**
     * 批量删除任务分配
     *
     * @param workId 需要删除的数据ID
     * @return 结果
     */
    public int deleteFileProcessByWorkId(Long workId);

    /**
     * 审批任务分配
     *
     * @param itemIds
     * @param realFinishTime
     * @return
     */
    public int finishedFileProcessUserByIds(@Param("itemIds") Long[] itemIds, @Param("realFinishTime") Date realFinishTime, @Param("state") String state);

    /**
     * 根据workId 数组获取 子任务列表
     *
     * @param workIds
     * @return
     */
    public List<FileProcessUser> selectFileProcessUserByWorkIds(Long[] workIds);

    /**
     * 根据workId 数组获取 子任务列表
     *
     * @param workIds
     * @return
     */
    public List<FileProcessUser> selectFileProcessUserByWorkIdsAndType(@Param("workIds")Long[] workIds, @Param("workType")String workType);

    /**
     * 根据workId 数组获取 子任务列表 是否完成
     *
     * @param workIds
     * @return
     */
    public List<FileProcessUser> selectFileProcessUserByWorkIdsIsComplete(Long[] workIds);

    /**
     * 根据itemId获取相同工作ID的子任务列表
     *
     * @param itemId
     * @return
     */
    public List<FileProcessUser> selectFileProcessUserPeerByItemId(@Param("itemId") String itemId, @Param("workType") String workType);

    /**
     * 根据workId获取相应工作信息
     *
     * @param
     * @return
     */
    public List<FileProcessUser> selectFileProcessUserPeerByWorkId(FileProcessUser fileProcessUser);


    public void updateFileProcessUserTimeOutById(List<Long> itemId);

    public List<Map<String, Object>> whetherSubmitFile(Long[] itemIds);

    public List<FileProcessUser> selectFileProcessUserByIds(Long[] itemId);

    int getFileProcessUserIsNotFinished(Long workId);

    /**
     * 新增文件组别关联信息
     *
     * @param fileProcessUserGroup 文件组别关联
     * @return 结果
     */
    public int insertFileProcessUserGroup(FileProcessUserGroup fileProcessUserGroup);

    /**
     * 根据工作ID修改任务分配
     *
     * @param fileProcessUser 任务分配
     * @return 结果
     */
    public int updateFileProcessUserByWorkId(FileProcessUser fileProcessUser);

    /**
     * 删除文件组别关联
     *
     * @param itemId 文件任务管理ID
     * @return 结果
     */
    public int deleteFileProcessUserGroup(Long itemId);

    /**
     * 批量删除文件任务管理
     *
     * @param itemIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteFileProcessUserGroupByItemIds(Long[] itemIds);

    /**
     * 根据itemid查询所属组别
     *
     * @param itemId 数据ID
     * @return 结果
     */
    public List<String> selectFileProcessGroupByItemId(@Param("itemId") Long itemId);

    /**
     * 统计待办工作
     *
     * @return
     */
    Map<String, Object> statistics(SysUser u);

    /**
     * 按item 查询 项目工作信息 包含 项目经理id
     *
     * @param projectIds
     * @return
     */
    List<FileProcessUser> selectProjectWorkManagerIds(Long[] projectIds);

    /**
     * 按item 修改项目工作 状态
     *
     * @param itemIds
     * @param applyStatePass
     * @return
     */
    int updateProjectWorkState(@Param("itemIds") Long[] itemIds, @Param("state") String applyStatePass);

    /**
     * 根据项目ID查询分配任务最大序列号
     *
     * @param workId 项目ID
     * @return
     */
    List<FileProcessUser> selectProjectWorkSerials( @Param("workId") Long workId);
}
